package com.code.service;

import com.code.AZPlan.model.bo.*;
import com.code.AZPlan.model.po.AzNotice;
import com.code.AZPlan.model.po.ExchangeFlow;
import com.code.AZPlan.model.po.MoneyTransferRecord;
import com.code.AZPlan.model.po.WithdrawOrder;
import com.code.model.vo.az.FastNewsResponseVo;

import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * AZ计划静态收益接口
 *
 * @author tangyifei
 */
public interface AZPlanStaticIncomeService {

    void reloadAccountTree();

    MoneyTransferRecord moneyTransfer(MoneyTransferRecord moneyTransferRecord);

    EntryMoneyBO entryMoney(EntryMoneyBO entryMoneyBO) throws Exception;

    MoneyTransferBO skipMoneyTransfer(String userId, String coinType, Integer transferType, Integer coinBalanceVersion) throws Exception;

    Map<String, Object> skipAsset(String userId);

    Map<String, Object> getOrePool(String userId, String coinType);

    ExchangeFlow exchange(ExchangeFlow exchangeFlow);

    Map<String, Object> getIncomes(String userId, Integer page, Integer pageSize) throws Exception;

    Map<String, Object> getUsdBills(String userId, String coinType, Integer page, Integer pageSize);

    Map<String, Object> getWalletTotalAssets(String userId);

    List<WalletBillBO> getWalletBills(String userId, String coinType, String coinAddress, Integer page, Integer pageSize);

    List<WalletAllBillBO> getWalletAllBills(String coinType);

    FastNewsResponseVo getFastNews();

    void manualExecSchedule();

    WithdrawBO skipWithdraw(String userId, String coinType, String toAddress);

    void withdraw(WithdrawOrder withdrawOrder);

    int inSiteTransfer(InSiteUserBO inSiteUserBO);

    InSiteUserBO getInSiteUserInfo(String userPhone);

    WithdrawBO getWithdrawList(WithdrawBO withdrawBO);

    int checkWithdraw(WithdrawOrder withdrawOrder);

    void updateXTExchangeRate();

    String manualPrintMemoryTree(String userPhone);

    BigDecimal getAllChildAccountTotalEntryAmount(String userPhone);

    Map<String, Object> getIndirectRecommendsByUserId(String parentId, Integer entryMoneyState, Integer page, Integer pageSize);

    Map<String, Object> getIndirectRecommendsByPhone(String phone, Integer entryMoneyState, Integer page, Integer pageSize);

    RechargeTranBO getDepositList(RechargeTranBO rechargeTranBO);

    UserAssetBO getUserAssetList(UserAssetBO userAssetBO);

    void markInnerUser(String phone);

    EntryMoneyFlowBO getEntryMoneyFlowList(EntryMoneyFlowBO entryMoneyFlowBO);

    ExchangeFlowBO getExchangeFlowList(ExchangeFlowBO exchangeFlowBO);

    void exportDepositExcel(HttpServletResponse response) throws Exception;

    void exportWithdrawExcel(HttpServletResponse response) throws Exception;

    void exportUserAssertExcel(HttpServletResponse response) throws Exception;

    void exportEntryMoneyExcel(HttpServletResponse response) throws Exception;

    void exportExchangeExcel(HttpServletResponse response) throws Exception;

    void exportIncomeStatisticsExcel(HttpServletResponse response) throws Exception;

    void exportIncomeDetailExcel(HttpServletResponse response) throws Exception;

    int addAzNotice(AzNotice azNotice);

    int updateAzNotice(AzNotice azNotice);

    AzNotice getAzNoticeById(String id);

    AzNoticeBO getAzNoticeList(AzNoticeBO azNoticeBO);

    int upDownAzNotice(AzNotice azNotice);

    IncomeStatisticsDailyBO getIncomeStatisticsList(IncomeStatisticsDailyBO incomeStatisticsDailyBO);

    IncomeStatisticsDailyBO getIncomeDetailList(IncomeStatisticsDailyBO incomeStatisticsDailyBO);

}
